﻿#ifndef NctiFuntionInterfaceManager_H
#define NctiFuntionInterfaceManager_H
#include "ncti_dcl_PluginManager.h"
#include "ncti_base.h"
#include <vector>
namespace NCTI
{
	class NctiRenderFunctionInterface;
	class NctiFunctionInterface;
	class NctiDocument;
	/**
	* @brief manager all function interface
	* @see NctiPCFunctionInterface, NctiRenderFunctionInterface, NctiFunctionInterface
	*/
	class DECL_NCTI_PLUGINMANAGER NctiFuntionInterfaceManager
	{
	public:
		NctiFuntionInterfaceManager();
		~NctiFuntionInterfaceManager();
		/**
	   * @brief Initialization during load all the plugins
	   */
		void InitPlugin();
		/**
	   * @brief Release during unload all the plugin
	   */
		void ReleasePlugin();
		/**
	   * @brief Initialization Document during create Document
	   */
		void InitDocument(NctiDocument* i_pDocument);
		/**
	   * @brief Release Document during Remove Document
	   */
		void ReleaseDocument(NctiDocument* i_pDocument);
		/**
	   * @brief add a render function interfaces
	   */
		void AddRenderFunctionInterface(NctiRenderFunctionInterface* i_pRenderFunctionInterface);
		/**
	   * @brief get all render function interfaces
	   * @return const std::vector<NctiRenderFunctionInterface*>&
	   */
		const std::vector<NctiRenderFunctionInterface*>& GetRenderFunctionInterface() { return m_RenderFunctionInterfaceVec; }
		/**
	   * @brief add a new other function interface
	   */
		void AddOtherFunctionInterface(NctiFunctionInterface* i_pFunctionInterface);
		/**
	   * @brief get all other function interface
	   * @return const std::vector<NctiFunctionInterface*>&
	   */
		const std::vector<NctiFunctionInterface*>& GetOtherFunctionInterface() { return m_OhterFunctionInterfaceVec; }
	private:
		std::vector<NctiRenderFunctionInterface*> m_RenderFunctionInterfaceVec;
		std::vector<NctiFunctionInterface*> m_OhterFunctionInterfaceVec;
	};
}
#endif
